先介绍一下call()的用法,apply()的用法与之大致相同,只不过参数列表略有不同

call()在我看来主要的功能就是在不修改对象的情况下对对象的属性进行 重写,使之继承一个新对象的属性

Symtax: fun.call(thisArg[, arg1[, arg2[, ...]]])

先举个简单的例子:

function vehicle(color, speed) {
    this.color = color;
    this.speed = speed;
}

function car(color,speed,price) {
    vehicle.call(this,arguments);
    this.price = price;
}

var mycar = new car("red", 100, 2000);
alert("汽车颜色是" + mycar.color + ", 速度是 " +
       mycar.speed + ", 价格是" + mycar.price);
//汽车颜色是red,速度是100,价格是2000  

    通过例子可以看出可以call方法增加对象的属性信息,
    也可以通过使用call方法覆盖原对象的属性
    
  


在举个简单的和作用域结合的例子

var x = 1;
function method() {
    alert(this.x);
}

var c = {};
c.x = 0;
c.m = method;

c.m.apply(); //1,此时调用的是全局对象
c.m.apply(c); //0,此时调用的是对象c

    
    
    


vincent_xyb
86 声望6 粉丝

如果我没有信念,我那时早死了